/* 
给定一个 row x col 的二维网格地图 grid ，其中：grid[i][j] = 1 表示陆地， grid[i][j] = 0 表示水域。

网格中的格子 水平和垂直 方向相连（对角线方向不相连）。整个网格被水完全包围，但其中恰好有一个岛屿（或者说，一个或多个表示陆地的格子相连组成的岛屿）。

岛屿中没有“湖”（“湖” 指水域在岛屿内部且不和岛屿周围的水相连）。格子是边长为 1 的正方形。网格为长方形，且宽度和高度均不超过 100 。计算这个岛屿的周长。


示例：
输入：grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
输出：16

*/

/* 
思路：
每个格子4条边，只要有邻近的格子就会减少两条边，每找到陆地都找他的下一行，右一行的邻近
所以 周长=4*格子数-2*邻近的边数

*/
/**
 * @param {number[][]} grid
 * @return {number}
 */
var islandPerimeter = function (grid) {
    let land = 0; // 土地个数
  let border = 0; // 接壤边界的条数

  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[0].length; j++) {
        // 找到陆地
      if (grid[i][j] == 1) {
        land++;
        // 每找到陆地都找他的下一行，右一行的邻近，如果邻近为陆地，相邻边++
        if (i < grid.length - 1 && grid[i + 1][j] == 1) {
          border++;
        }
        if (j < grid[0].length - 1 && grid[i][j + 1] == 1) {
          border++;
        }
      }
    }
  }
  return 4 * land - 2 * border;
};

// 运行
let grid = [[0, 1, 0, 0], [1, 1, 1, 0], [0, 1, 0, 0], [1, 1, 0, 0]]
console.log(islandPerimeter(grid));